20277
1114
لقد ارتكبت ملفات خاطئة بطريق الخطأ إلى Git ، لكنني لم أدفع الالتزام إلى الخادم حتى الآن.
كيف يمكنني التراجع عن تلك الالتزامات من المستودع المحلي؟ 
1
2
3
التالى
التراجع عن الالتزام والإعادة
$ git الالتزام -m "شيء مضلل بشكل رهيب" # (0: حادثك)
$ git إعادة تعيين HEAD ~ # (1)
<< تحرير الملفات حسب الضرورة >> # (2)
إضافة بوابة $. # (3)
$ git الالتزام -c ORIG_HEAD # (4)
هذا الأمر مسؤول عن التراجع. سيؤدي ذلك إلى التراجع عن آخر التزام لك مع ترك شجرة العمل (حالة الملفات على القرص) دون تغيير. ستحتاج إلى إضافتها مرة أخرى قبل أن تتمكن من إلحاقها مرة أخرى).
عمل تصحيحات لملفات شجرة العمل.
git تضيف أي شيء تريد تضمينه في الالتزام الجديد.
قم بإجراء التغييرات ، وأعد استخدام رسالة الالتزام القديمة. إعادة نسخ الرأس القديم إلى .git / ORIG_HEAD ؛ الالتزام بـ -c سيفتح ORIG_HEAD محررًا يحتوي في البداية على رسالة السجل من الالتزام القديم ويسمح لك بتحريره. إذا لم تكن بحاجة إلى تعديل الرسالة ، فيمكنك استخدام الخيار -C.
بدلاً من ذلك ، لتحرير الالتزام السابق (أو مجرد رسالة الالتزام) ، سيضيف الالتزام - تعديل التغييرات داخل الفهرس الحالي إلى الالتزام السابق.
لإزالة (وليس التراجع) التزام تم دفعه إلى الخادم ، من الضروري إعادة كتابة السجل باستخدام git push origin master --force.
قراءة متعمقة
كيف يمكنني نقل HEAD مرة أخرى إلى موقع سابق؟ (رأس منفصل) والتراجع عن ارتكاب
ستوضح لك الإجابة أعلاه git reflog ، والتي يمكنك استخدامها لتحديد SHA-1 للالتزام الذي ترغب في الرجوع إليه. بمجرد الحصول على هذه القيمة ، استخدم تسلسل الأوامر كما هو موضح أعلاه.
HEAD ~ هو نفسه HEAD ~ 1. المقال ما هو الرأس في البوابة؟ مفيد إذا كنت تريد عدم الالتزام بالعديد من الالتزامات.
|
يعد التراجع عن الالتزام مخيفًا بعض الشيء إذا كنت لا تعرف كيف يعمل. لكنها في الواقع سهلة بشكل مثير للدهشة إذا فهمت. سأوضح لك الطرق الأربع المختلفة التي يمكنك من خلالها التراجع عن الالتزام.
الخيار 1: إعادة تعيين البوابة - بجد
لنفترض أن لديك هذا ، حيث C هي رأسك و (F) هي حالة ملفاتك.
(F)
أ-ب-ج
↑
رئيس
تريد أن تلتزم بـ C ولا تراه مرة أخرى وتفقد جميع التغييرات في الملفات المعدلة محليًا. أنت تفعل هذا:
إعادة تعيين البوابة - رأس صلب ~ 1
النتيجه هي:
(F)
أ-ب
↑
رئيس
الآن B هو الرأس. نظرًا لأنك استخدمت - hard ، تتم إعادة تعيين ملفاتك إلى حالتها عند الالتزام B.
الخيار 2: إعادة تعيين البوابة
آه ، لكن لنفترض أن الالتزام C لم يكن كارثة ، ولكنه كان قليلًا. تريد التراجع عن الالتزام ولكن احتفظ بالتغييرات الخاصة بك قليلاً من التحرير قبل أن تقوم بتنفيذ التزام أفضل. نبدأ مرة أخرى من هنا ، مع C كرأسك:
(F)
أ-ب-ج
↑
رئيس
يمكنك القيام بذلك ، تاركًا الأشياء الصعبة:
إعادة تعيين بوابة HEAD ~ 1
في هذه الحالة تكون النتيجة:
(F)
أ-ب-ج
↑
رئيس
في كلتا الحالتين ، يكون HEAD مجرد مؤشر إلى آخر التزام. عندما تقوم بإعادة تعيين git HEAD ~ 1 ، فإنك تخبر Git بتحريك مؤشر HEAD للخلف مرة واحدة. لكن (ما لم تستخدم - بشدة) تترك ملفاتك كما كانت. حتى الآن تُظهر حالة git التغييرات التي قمت بتسجيلها في C. لم تفقد أي شيء!
الخيار 3: إعادة تعيين بوابة - لينة
للحصول على لمسة أخف ، يمكنك حتى التراجع عن الالتزام ولكن اترك ملفاتك وفهرسك:
إعادة تعيين البوابة - رأس ناعم ~ 1
هذا لا يترك ملفاتك بمفردها فحسب ، بل إنه يترك فهرسك وشأنه. عندما تقوم بعمل git status ، سترى أن نفس الملفات موجودة في الفهرس كما كان من قبل. في الواقع ، بعد هذا الأمر مباشرة ، يمكنك تنفيذ الأمر git الالتزام وستعيد نفس الالتزام الذي قمت به للتو.
الخيار 4: لقد أجريت إعادة تعيين - بشدة وتحتاج إلى استعادة هذا الرمز
شيء آخر: لنفترض أنك أتلفت التزامًا كما في المثال الأول ، لكنك اكتشفت أنك بحاجة إليه بعد كل شيء؟ حظ صعب ، أليس كذلك؟
كلا ، لا تزال هناك طريقة لاستعادتها. اكتب git reflog وسترى قائمة بـ shas الالتزام (الجزئي) (أي ، التجزئة) التي انتقلت إليها. ابحث عن الالتزام الذي دمرته ، وقم بما يلي:
بوابة الخروج -b someNewBranchName shaYouDestroyed
لقد قمت الآن بإحياء هذا الالتزام. لا يتم تدمير الالتزامات فعليًا في Git لمدة 90 يومًا ، لذلك يمكنك عادةً العودة وإنقاذ شخص لم تكن تقصد التخلص منه.
|
هناك طريقتان "للتراجع" عن آخر التزام لك ، اعتمادًا على ما إذا كنت قد جعلت التزامك علنيًا أم لا (تم دفعه إلى مستودعك البعيد):
كيفية التراجع عن التزام محلي
لنفترض أنني ملتزمة محليًا ، لكنني الآن أريد إزالة هذا الالتزام.
سجل بوابة
ارتكاب 101: ارتكاب سيء # أحدث ارتكاب. يمكن أن يسمى هذا "رأس".
التزام 100: التزام جيد # ثانيًا لآخر التزام. هذا هو الذي نريده.
لاستعادة كل شيء إلى ما كان عليه قبل الالتزام الأخير ، نحتاج إلى إعادة ضبط الالتزام قبل HEAD:
إعادة تعيين git - soft HEAD ^ # استخدم - ناعم إذا كنت تريد الاحتفاظ بالتغييرات
git reset - hard HEAD ^ # Use - hard إذا كنت لا تهتم بالاحتفاظ بالتغييرات التي أجريتها
سيُظهر سجل git الآن أنه قد تمت إزالة آخر التزام.
كيفية التراجع عن التزام عام
إذا كنت قد أعلنت بالفعل عن التزاماتك ، فستحتاج إلى إنشاء التزام جديد "سيعود" عن التغييرات التي أجريتها في الالتزام السابق (الرأس الحالي).
بوابة العودة الرأس
سيتم الآن التراجع عن تغييراتكوجاهزًا لك للالتزام:
git الالتزام -m "استعادة الملف الذي أزلته عن طريق الصدفة"
سجل بوابة
الالتزام 102: استعادة الملف الذي قمت بحذفه عن طريق الصدفة
الالتزام 101: إزالة ملف لسنا بحاجة إليه
الالتزام 100: إضافة ملف نحتاجه
لمزيد من المعلومات ، راجع أساسيات Git - التراجع عن الأشياء.
|
أضف / أزل الملفات للحصول على الأشياء بالطريقة التي تريدها:
بوابة rm classdir
بوابة add sourcedir
ثم قم بتعديل الالتزام:
git الالتزام - تعديل
سيتم تعديل الالتزام السابق الخاطئ ليعكس حالة الفهرس الجديدة - وبعبارة أخرى ، سيكون الأمر كما لو أنك لم ترتكب الخطأ مطلقًا في المقام الأول.
لاحظ أنه يجب عليك القيام بذلك فقط إذا لم تكن قد دفعت بعد. إذا كنت قد ضغطت ، فسيتعين عليك فقط إجراء الإصلاح بشكل طبيعي.
|
git rm yourfiles / *. class
git الالتزام -a -m "حذف جميع ملفات الفئة في المجلد" yourfiles ""
أو
إعادة تعيين البوابة - رأس صلب ~ 1
تحذير: سيؤدي الأمر أعلاه إلى إزالة التعديلات التي تم إجراؤها على ملفات .java (وأي ملفات أخرى) التي تريد تنفيذها بشكل دائم.
ستؤدي إعادة التعيين الثابت إلى HEAD-1 إلى تعيين نسخة العمل الخاصة بك على حالة الالتزام قبل الالتزام الخاطئ.
|
لتغيير الالتزام الأخير
استبدل الملفات الموجودة في الفهرس:
git rm - مؤقت * .class
بوابة add * .java
ثم ، إذا كان فرعًا خاصًا ، فقم بتعديل الالتزام:
git الالتزام - تعديل
أو ، إذا كان فرعًا مشتركًا ، فقم بعمل التزام جديد:
git الالتزام -m "استبدل ملفات .class بملفات java."
(لتغيير الالتزام السابق ، استخدم تغيير الأساسي التفاعلي الرائع.)
ProTip ™: أضف * .class إلى gitignore لمنع حدوث ذلك مرة أخرى.
للعودة الالتزام
يعد تعديل الالتزام هو الحل المثالي إذا كنت بحاجة إلى تغيير الالتزام الأخير ، ولكن تتم إعادة تعيين حل أكثر عمومية.
يمكنك إعادة تعيين Git لأي التزام باستخدام:
إعادة تعيين بوابة @ ~ N
حيث N هو عدد عمليات الالتزام قبل HEAD ، و @ ~ يعيد التعيين إلى الالتزام السابق.
لذلك ، بدلاً من تعديل الالتزام ، يمكنك استخدام:
إعادة تعيين بوابة @ ~
بوابة add * .java
git الالتزام -m "إضافة ملفات java."
تحقق من إعادة تعيين git help ، وتحديدًا الأقسام الموجودة على - soft - mixed and - hard ، لفهم أفضل لما يفعله هذا.
إعادة تسجيل
إذا أخطأت ، يمكنك دائمًا استخدام إعادة التدوين للعثور على الالتزامات التي تم إسقاطها:
إعادة تعيين $ git @ ~
$ git reflog
c4f708b HEAD @ {0}: إعادة الضبط: الانتقال إلى @ ~
2c52489 HEAD @ {1}: الالتزام: تمت إضافة بعض ملفات class
إعادة تعيين $ git 2c52489
... وعدت حيث بدأت
|
استخدم git revert .
للحصول على معرّف الالتزام ، ما عليك سوى استخدام سجل git.
|
إذا كنت تخطط للتراجع عن التزام محلي تمامًا ، مهما كان التغيير الذي قمت به في الالتزام ، وإذا كنت لا تقلق بشأن أي شيء ، فما عليك سوى تنفيذ الأمر التالي.
إعادة تعيين بوابة - Hard HEAD ^ 1
(سيتجاهل هذا الأمر الالتزام بالكامل وستفقد تغييراتك تمامًا من شجرة العمل المحلية الخاصة بك). إذا كنت تريد التراجع عن الالتزام ، لكنك تريد تغييراتك في منطقة التدريج (قبل الالتزام تمامًا مثل بعد git add) ، فقم بتنفيذ الأمر التالي.
إعادة تعيين بوابة - رأس ناعم ^ 1
الآن تأتي ملفاتك الملتزمة في منطقة التدريج. لنفترض أنك إذا كنت ترغب في ترقية الملفات ، لأنك تحتاج إلى تحرير بعض المحتوى الخاطئ ، فقم بتنفيذ الأمر التالي
بوابة إعادة تعيين الرأس
يتم الآن إرسال الملفات الملتزمة من المنطقة التي تم تنظيمها إلى المنطقة غير المنظمة. أصبحت الملفات الآن جاهزة للتعديل ، لذا مهما تغيرت ، فأنت تريد تعديله وإضافته وإجراء التزام جديد / جديد.
المزيد (الرابط معطل) (النسخة المؤرشفة)
|
إذا كان لديك Git Extras مثبتًا ، فيمكنك تشغيل git undo للتراجع عن آخر التزام. git التراجع 3 سيؤدي إلى التراجع عن الالتزامات الثلاثة الأخيرة.
|
أردت التراجع عن أحدث خمسة التزامات في مستودعنا المشترك. بحثت عن معرف المراجعة الذي أردت الرجوع إليه. ثم كتبت ما يلي.
موجه> git reset - hard 5a7404742c85
HEAD الآن في 5a74047 تمت إضافة صفحة أخرى إلى الكتالوج
موجه> git push origin master --force
المجموع 0 (دلتا 0) ، المعاد استخدامه 0 (دلتا 0)
عن بعد: bb / acl: يسمح neoneye. الحمولة المقبولة.
إلى git@bitbucket.org: thecompany / prometheus.git
+ 09a6480 ... 5a74047 ماستر -> سيد (تحديث إجباري)
موجه>
|
أفضل استخدام git rebase -i لهذه الوظيفة ، لأن قائمة رائعة تظهر حيث يمكنني اختيار الالتزامات للتخلص منها. قد لا تكون مباشرة مثل بعض الإجابات الأخرى هنا ، لكنها تبدو صحيحة.
اختر عدد الالتزامات التي تريد سردها ، ثم استدعِ مثل هذا (لتجنيد الثلاثة الأخيرة)
git rebase -i HEAD ~ 3
قائمة عينة
اختر aa28ba7 Sanity للتحقق من منفذ RtmpSrv
اختر خيار إصدار c26c541 RtmpSrv
اختيار 58d6909 أفضل دعم فك تشفير URL
ثم سيزيل Git الالتزامات لأي سطر تزيله.
|
كيفية إصلاح الالتزام المحلي السابق
استخدم git-gui (أو ما شابه) لتنفيذ git الالتزام - تعديل. من واجهة المستخدم الرسومية ، يمكنك إضافة أو إزالة ملفات فردية من التنفيذ. يمكنك أيضًا تعديل رسالة التنفيذ.
كيفية التراجع عن الالتزام المحلي السابق
ما عليك سوى إعادة تعيين فرعك إلى الموقع السابق (على سبيل المثال ، باستخدام gitk أو git rebase). ثم أعد تطبيق التغييرات من نسخة محفوظة. بعد جمع القمامة في المستودع المحلي الخاص بك ، سيكون الأمر كما لو أن الالتزام غير المرغوب فيه لم يحدث أبدًا. للقيام بكل ذلك في أمر واحد ، استخدم الأمر git reset HEAD ~ 1.
كلمةتحذير: يعد الاستخدام المتهور لإعادة تعيين git طريقة جيدة لوضع نسخة العمل الخاصة بك في حالة مربكة. أوصي بأن يتجنب مبتدئي Git هذا إذا استطاعوا.
كيفية التراجع عن التزام عام
قم بإجراء اختيار عكسي للكرز (git-revert) للتراجع عن التغييرات.
إذا لم تكن قد سحبت التغييرات الأخرى على فرعك بعد ، فيمكنك ببساطة القيام ...
بوابة العودة - عدم تحرير الرأس
ثم ادفع فرعك المحدث إلى المستودع المشترك.
سيُظهر سجل الالتزام كلا الالتزامين ، بشكل منفصل.
متقدم: تصحيح الفرع الخاص في المستودع العام
قد يكون هذا خطيرًا - تأكد من أن لديك نسخة محلية من الفرع لإعادة نشرها.
لاحظ أيضًا: لا تريد القيام بذلك إذا كان هناك شخص آخر يعمل في الفرع.
git push --delete (Branch_name) ## إزالة الإصدار العام من الفرع
نظف فرعك محليًا ثم أعد تنظيفه ...
أصل دفع بوابة (اسم_فرع)
في الحالة العادية ، ربما لا داعي للقلق بشأن سجل الالتزام في الفرع الخاص بك. ما عليك سوى دفع التزام المتابعة (راجع "كيفية التراجع عن التزام عام" أعلاه) ، ثم قم بعد ذلك بإجراء عملية دمج اسكواش لإخفاء السجل.
|
إذا كنت تريد التراجع عن ذلك بشكل دائم وقمت باستنساخ بعض المستودعات
يمكن رؤية معرف الالتزام بواسطة
سجل بوابة
ثم يمكنك أن تفعل -
إعادة تعيين git - صعب 
أصل دفع بوابة  -f
|
إذا كنت قد ارتكبت نفايات ولكن لم تدفع ،
إعادة تعيين البوابة - رأس ناعم ~ 1
HEAD ~ 1 هو اختصار للالتزام قبل الرأس. بدلاً من ذلك ، يمكنك الرجوع إلى SHA-1 للتجزئة إذا كنت تريد إعادة التعيين إلى. - سوف يحذف خيار --soft الالتزام ولكنه سيترك جميع ملفاتك التي تم تغييرها "يجب الالتزام بالتغييرات" ، حيث ستضعها حالة git.
إذا كنت تريد التخلص من أي تغييرات على الملفات المتعقبة في شجرة العمل منذ الالتزام قبل استخدام الرأس "- hard" بدلاً من ذلك.
أو
إذا كنت قد دفعت بالفعل وسحب شخص ما وهو عادة حالتي ، فلا يمكنك استخدام git reset. ومع ذلك ، يمكنك إجراء عملية إرجاع git ،
بوابة العودة الرأس
سيؤدي هذا إلى إنشاء التزام جديد يعكس كل شيء قدمه الالتزام العرضي.
|
في SourceTree (واجهة المستخدم الرسومية لـ GitHub) ، يمكنك النقر بزر الماوس الأيمن فوق الالتزام وإجراء "الالتزام العكسي". يجب أن يؤدي هذا إلى التراجع عن تغييراتك.
في المحطة:
يمكنك بدلاً من ذلك استخدام:
بوابة العودة
أو:
إعادة تعيين git - soft HEAD ^ # استخدم - ناعم إذا كنت تريد الاحتفاظ بالتغييرات.
إعادة تعيين git - hard HEAD ^ # Use - hard إذا كنت لا تهتم بالاحتفاظ بالتغييرات.
|
أمر واحد:
إعادة تعيين git - 'HEAD ^' الناعمة
من الرائع التراجع عن آخر التزام محلي!
|
ما عليك سوى إعادة تعيينها بتنفيذ الأمر أدناه باستخدام git:
إعادة تعيين البوابة - رأس ناعم ~ 1
اشرح: ما يفعله git reset ، يتم إعادة تعيينه أساسًا إلى أي التزام تريد العودة إليه ، ثم إذا قمت بدمجه مع - مفتاح ناعم ، فسيعود ، ولكن احتفظ بالتغييرات في ملفك (ملفاتك) ، لذلك ستعود إلى المرحلة التي تمت إضافة الملف للتو ، ويكون HEAD هو رأس الفرع وإذا قمت بالدمج مع ~ 1 (في هذه الحالة ، يمكنك أيضًا استخدام HEAD ^) ، فسيعود الالتزام مرة واحدة فقط الذي تريده. ..
أقوم بإنشاء الخطوات في الصورة أدناه بمزيد من التفاصيل لك ، بما في ذلك جميع الخطوات التي قد تحدث في مواقف حقيقية وتنفيذ الكود:
|
كيف يمكن التراجع عن آخر التزام Git؟
لاستعادة كل شيء إلى ما كان عليه قبل الالتزام الأخير ، نحتاج إلى إعادة التعيين إلى الالتزام قبل HEAD.
إذا كنت لا تريد الاحتفاظ بالتغييرات التي أجريتها:
إعادة تعيين بوابة - Hard HEAD ^
إذا كنت تريد الاحتفاظ بالتغييرات الخاصة بك:
إعادة تعيين البوابة - رأس ناعم ^
تحقق الآن من سجل git الخاص بك. سيظهر أنه قد تمت إزالة التزامنا الأخير.
|
"إعادة تعيين شجرة العمل إلى آخر التزام"
إعادة تعيين بوابة - Hard HEAD ^
"تنظيف الملفات غير المعروفة من شجرة العمل"
بوابة نظيفة
انظر - المرجع السريع Git
ملاحظة: سيحذف هذا الأمر الالتزام السابق ، لذا استخدمه بحذر! إعادة تعيين بوابة - الأصعب أكثر أمانًا.
|
استخدم reflog للعثور على الحالة الصحيحة
بوابة reflog
سجل قبل إعادة الضبط
حدد reflog الصحيح (f3cb6e2 في حالتي) واكتب
إعادة تعيين بوابة - hard f3cb6e2
بعد ذلك ، سيتم إعادة تعيين رأس الريبو إلى هذا الرأس
سجل بعد إعادة الضبط
أخيرًا ، تبدو إعادة التدوين مثل الصورة أدناه
REFLOG نهائي
|
الجولة الأولى:
بوابة reflog
سيُظهر لك جميع الإجراءات الممكنة التي قمت بها على المستودع الخاص بك ، على سبيل المثال ، الالتزام والدمج والسحب وما إلى ذلك.
ثم افعل:
إعادة تعيين بوابة - Hard ActionIdFromRefLog
|
تراجع عن الالتزام الأخير:
git reset - soft HEAD ^ or git reset --soft HEAD ~
سيؤدي هذا إلى التراجع عن الالتزام الأخير.
هنا - الناعمة تعني إعادة التعيين في التدريج.
HEAD ~ أو HEAD ^ تعني التحرك للالتزام قبل HEAD.
استبدال الالتزام الأخير بالتزام جديد:
git الالتزام - تعديل -m "الرسالة"
سيحل محل الالتزام الأخير مع الالتزام الجديد.
|
طريق اخر:
تحقق من الفرع الذي تريد التراجع عنه ، ثم أعد تعيين نسخة العمل المحلية الخاصة بك مرة أخرى إلى الالتزام الذي تريده أن يكون الأحدث على الخادم البعيد (كل شيء بعد ذلك سيذهب إلى اللقاء). للقيام بذلك ، في SourceTree ، قمت بالنقر بزر الماوس الأيمن فوق "إعادة تعيين BRANCHNAME إلى هذا الالتزام" وحدده.
ثم انتقل إلى الدليل المحلي للمستودع الخاص بك وقم بتشغيل هذا الأمر:
git -c diff.mnemonicprefix = false -c core.quotepath = false push -v -f --tags REPOSITORY_NAMEBRANCHNAME: BRANCHNAME
سيؤدي هذا إلى مسح جميع الالتزامات بعد الإصدار الحالي في المستودع المحلي الخاص بك ولكن فقط لهذا الفرع الواحد.
|
اكتب git log وابحث عن آخر كود تجزئة تنفيذ ثم أدخل:
إعادة تعيين بوابة <الشركة السابقة>
|
في حالتي ، ارتكبت عن طريق الخطأ بعض الملفات التي لم أرغب في ذلك. لذلك قمت بما يلي وعملت:
إعادة تعيين البوابة - رأس ناعم ^
git rm - مؤقت [الملفات التي لا تحتاجها]
git add [الملفات التي تحتاجها]
بوابة الالتزام -c ORIG_HEAD
تحقق من النتائج باستخدام gitk أو git log --stat
|
بسيط ، قم بتشغيل هذا في سطر الأوامر الخاص بك:
إعادة تعيين البوابة - رأس ناعم ~
|
هناك نوعان من السيناريوهين الرئيسيين
لم تدفع الالتزام حتى الآن
إذا كانت المشكلة عبارة عن ملفات إضافية التزمت بها (ولا تريد تلك الموجودة في المستودع) ، فيمكنك إزالتها باستخدام git rm ثم الالتزام بـ --amend
بوابة rm 
يمكنك أيضًا إزالة الدلائل بأكملها باستخدام -r ، أو حتى دمجها مع أوامر Bash الأخرى
بوابة rm -r 
git rm $ (find -name '* .class')
بعد إزالة الملفات ، يمكنك الالتزام ، مع خيار التعديل
git الالتزام - تعديل -C HEAD # الخيار -C هو استخدام نفس رسالة التنفيذ
سيؤدي هذا إلى إعادة كتابة الالتزام المحلي الأخير الخاص بك وإزالة الملفات الإضافية ، لذلك ، لن يتم إرسال هذه الملفات مطلقًا عند الدفع وستتم إزالتها أيضًا من مستودع .git المحلي بواسطة GC.
لقد دفعت بالفعل الالتزام
يمكنك تطبيق نفس الحل للسيناريو الآخر ثم تنفيذ الأمر git push باستخدام الخيار -f ، ولكن لا يوصى بذلك لأنه يستبدل السجل البعيد بتغيير متباين (يمكن أن يفسد المستودع الخاص بك).
بدلاً من ذلك ، يجب عليك تنفيذ الالتزام بدون - تعديل (تذكر هذا حول -amend`: هذا الخيار يعيد كتابة التاريخ في آخر التزام).
|
للالتزام المحلي
إعادة تعيين البوابة - رأس ناعم ~ 1
أو إذا كنت لا تتذكر بالضبط في أي التزام هو ، يمكنك استخدام
git rm - مؤقت <ملف>
من أجل الالتزام المدفوع
الطريقة الصحيحة لإزالة الملفات من محفوظات المستودع هي استخدام git filter-Branch. هذا هو،
git filter-Branch - index-filter 'git rm - cached ' HEAD
لكني أوصيك باستخدام هذا الأمر بعناية. اقرأ المزيد على git-filter-Branch (1) Manual Page.
|
لإعادة التعيين إلى المراجعة السابقة ، حذف جميع التغييرات غير الملتزم بها نهائيًا:
إعادة تعيين البوابة - رأس صلب ~ 1
|
ما الذي يجب استخدامه ، إعادة تعيين - لينة أو إعادة تعيين - صعبة؟
أنا فقط أضيف سنتان لإجابة @ Kyralessa:
إذا لم تكن متأكدًا مما يجب استخدامه ، فابحث عن - soft (لقد استخدمت هذه الاتفاقية لأتذكرها - ناعمة للأمان).
لماذا ا ؟
إذا اخترت - بشدة عن طريق الخطأ ، فستفقد تغييراتك كما لم تكن من قبل.
إذا اخترت - لينة عن طريق الخطأ ، يمكنك تحقيق نفس النتائج من - بجد من خلال تطبيق أوامر إضافية
git reset HEAD file.html
بوابة الخروج - file.html
المثال الكامل
صدى "بعض التغييرات ..."> file.html
git add file.html
git الالتزام -m "خطأ"
# أحتاج إلى إعادة التعيين
إعادة تعيين بوابة - Hard HEAD ~ 1 (إلغاء التغييرات)
# أو
إعادة تعيين البوابة - رأس ناعم ~ 1 # رجوع إلى التدريج
git reset HEAD file.html # back to working directory
بوابة الخروج - file.html # إلغاء التغييرات
الاعتمادات تذهب إلىKyralessa.
|
1
2
3
التالى
سؤال نشط للغاية. اكسب 10 سمعة للإجابة على هذا السؤال. تساعد متطلبات السمعة في حماية هذا السؤال من البريد العشوائي ونشاط عدم الإجابة.
ليس الجواب الذي تبحث عنه؟ تصفح الأسئلة الأخرى الموسومة git version-control git-الالتزام التراجع أو اطرح سؤالك الخاص.